#ifndef DATASTRUCTURE_BINARY_TREE_H
#define DATASTRUCTURE_BINARY_TREE_H

typedef char ElemType;

/**
 * 树三种存储结构
 *    1. 双亲存储结构
 *    2. 孩子链存储结构
 *    3. 孩子兄弟连存储结构
 */

// 二叉树的链式存储结构
typedef struct TreeNode{
    ElemType data;
    struct TreeNode *lchild;
    struct TreeNode *rchild;
}BinaryTree;

BinaryTree* initBinaryTree(ElemType data);

// 顺序存储初始化二叉树(只适合完全二叉树)
BinaryTree* createBinaryTreeByArray(ElemType arrayData[], int size);

// 括号表示法初始化二叉树
BinaryTree* createBinaryTreeByString(ElemType *str);

// 先序遍历
void preOrder(BinaryTree *root);

// 中序遍历
void inOrder(BinaryTree *root);

// 后序遍历
void postOrder(BinaryTree *root);

// 层次遍历
void levelOrder(BinaryTree *root);

// 释放内存
void deleteBinaryTree(BinaryTree *root);

void binaryTreeTest();

#endif //DATASTRUCTURE_BINARY_TREE_H